home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / DCLAP 6d / dclap6d / DClap / DObject.cpp < prev    next >
Text File  |  1996-07-05  |  2KB  |  81 lines

  1. // DObject.cp
  2.  
  3. #include "Dvibrant.h"
  4. #include "DObject.h"
  5.  
  6.  
  7.  
  8. DObject::DObject() 
  9.   fOwners= 1; 
  10.   fClassName= "DObject";
  11.   //fClassSize= sizeof(DObject); // this is bad news -- 
  12.           // !! DObjects created statically don't know their fClassSize !?
  13.           // at least for Clone this causes problems.
  14. }
  15.  
  16. void killit( DObject* victim)
  17. {
  18.     delete victim;
  19. }
  20.  
  21. Boolean DObject::suicide(void) 
  22.     if (--fOwners < 1) { 
  23.         killit(this); //delete this; 
  24.         return true; 
  25.         }
  26.     else 
  27.         return false;
  28. }
  29.  
  30. Boolean DObject::suicide(short ownercount)
  31. {
  32.     if ((fOwners= ownercount) < 1) {
  33.         killit(this); //delete this; 
  34.         return true; 
  35.         }
  36.     else 
  37.         return false;
  38. }
  39.  
  40.  
  41. void*    DObject::operator new( size_t objSize) 
  42. {    
  43.             // assume c++ knows how to new an object ...
  44.     void* theObject = ::operator new( objSize); // = Nlm_MemNew( objSize); 
  45.             // but we still want to remember its size!
  46.     ((DObject*) theObject)->fClassSize= objSize;
  47.     return  theObject;
  48.  
  49. void DObject::operator delete( void* objStorage)
  50. {
  51.             // assume c++ knows how to delete an object ...
  52.      ::operator delete(objStorage);  // Nlm_MemFree(objStorage);  
  53. }
  54.  
  55.  
  56.  
  57. DObject*    DObject::Clone(void)
  58. {
  59.     return this->BasicClone();
  60. }
  61.  
  62. DObject*    DObject::BasicClone(void)
  63. {
  64. #if 0
  65.         // this is okay if we use Nlm_Mem for new/delete
  66.     DObject* result= (DObject *) Nlm_MemDup( this, fClassSize);
  67. #else
  68.         // this is best if we use default new/delete
  69.     DObject* result= (DObject *) ::operator new(fClassSize); 
  70.     Nlm_MemMove(result, this, fClassSize);
  71. #endif
  72.   result->fOwners= 1; // reset this as if it were a new()
  73.     return  result;
  74. }  
  75.  
  76.  
  77.  
  78.